#!/usr/bin/env python3
"""
PyWebview TodoList 主应用程序
使用 pywebview 创建桌面待办事项应用

功能特性:
- 现代化的Web界面
- 本地数据存储
- 跨平台支持
- 完整的CRUD操作
"""

import webview
import os
import sys
from pathlib import Path

# 导入后端API
from todo_backend import api
from config import APP_CONFIG


def get_static_path():
    """
    获取静态文件路径
    支持开发环境和打包后的环境
    
    Returns:
        str: 静态文件目录的绝对路径
    """
    if getattr(sys, 'frozen', False):
        # 如果是打包后的可执行文件
        base_path = Path(sys.executable).parent
        static_path = base_path / "_internal" / "static"
        if not static_path.exists():
            static_path = base_path / "static"
    else:
        # 开发环境
        base_path = Path(__file__).parent
        static_path = base_path / 'static'
    
    # 确保静态文件目录存在
    if not static_path.exists():
        print(f"错误: 静态文件目录不存在: {static_path}")
        sys.exit(1)
    
    return str(static_path)


def create_window():
    """
    创建并配置pywebview窗口
    
    Returns:
        webview.Window: 配置好的窗口对象
    """
    # 获取静态文件路径
    static_path = get_static_path()
    index_file = os.path.join(static_path, 'index.html')
    
    # 确保index.html文件存在
    if not os.path.exists(index_file):
        print(f"错误: 找不到主页文件: {index_file}")
        sys.exit(1)
    
    print(f"静态文件路径: {static_path}")
    print(f"主页文件: {index_file}")
    
    # 创建窗口（使用pywebview支持的基本参数）
    window = webview.create_window(
        title=APP_CONFIG['title'],              # 窗口标题
        url=index_file,                              # 加载的HTML文件
        width=900,                                   # 窗口宽度
        height=700,                                  # 窗口高度
        min_size=(600, 500),                         # 最小尺寸
        resizable=True,                              # 允许调整大小
        js_api=api                                   # 绑定JavaScript API
    )
    return window


def setup_webview():
    """
    配置 pywebview 全局设置
    """
    # 全局配置
    webview_config = {
        'debug': False,                              # 是否启用调试模式
        'private_mode': False,                       # 是否启用隐私模式
        'storage_path': None,                        # 存储路径（使用默认）
    }
    
    # 平台特定配置
    if sys.platform.startswith('win'):
        # Windows平台配置
        webview_config.update({
            'gui': 'edgechromium',                   # 使用Edge WebView2
        })
        print("平台: Windows, 使用 Edge WebView2")
        
    elif sys.platform.startswith('darwin'):
        # macOS平台配置
        webview_config.update({
            'gui': 'cocoa',                          # 使用Cocoa (WebKit)
        })
        print("平台: macOS, 使用 WebKit")
        
    elif sys.platform.startswith('linux'):
        # Linux平台配置
        webview_config.update({
            'gui': 'gtk',                            # 使用GTK
        })
        print("平台: Linux, 使用 GTK")
    
    return webview_config


# 移除事件回调函数以避免兼容性问题


def main():
    """
    主函数 - 应用程序入口点
    """
    print("="*50)
    print("    PyWebview TodoList 应用启动中...")
    print("="*50)
    
    try:
        # 检查Python版本
        if sys.version_info < (3, 7):
            print("错误: 需要 Python 3.7 或更高版本")
            sys.exit(1)
        
        print(f"Python 版本: {sys.version}")
        
        # 获取PyWebview版本（某些版本可能没有__version__属性）
        try:
            webview_version = getattr(webview, '__version__', 'Unknown')
            print(f"PyWebview 版本: {webview_version}")
        except AttributeError:
            print("PyWebview 版本: Unknown")
        
        # 配置 webview
        webview_config = setup_webview()
        
        # 创建窗口
        window = create_window()
        
        print("\n窗口配置:")
        print(f"  标题: 每日待办清单 - TodoList")
        print(f"  尺寸: 900x700")
        print(f"  最小尺寸: (600, 500)")
        
        print("\n启动应用程序...")
        
        # 启动应用程序
        webview.start()
        
    except KeyboardInterrupt:
        print("\n\n用户中断，应用程序退出")
        
    except ImportError as e:
        print(f"\n错误: 缺少必要的依赖包")
        print(f"详细信息: {e}")
        print("\n请运行以下命令安装依赖:")
        print("pip install pywebview")
        sys.exit(1)
        
    except FileNotFoundError as e:
        print(f"\n错误: 找不到必要的文件")
        print(f"详细信息: {e}")
        print("\n请确保所有文件都在正确的位置")
        sys.exit(1)
        
    except Exception as e:
        print(f"\n未预期的错误: {e}")
        print("请检查应用程序配置和环境")
        sys.exit(1)
        
    finally:
        print("\n应用程序已退出")


if __name__ == '__main__':
    # 设置工作目录为脚本所在目录
    script_dir = Path(__file__).parent
    os.chdir(script_dir)
    
    # 启动应用程序
    main()
